//
//  WBUserAccount.swift
//  Swift微博
//
//  Created by WangDaqiang on 2018/8/8.
//  Copyright © 2018年 汪大强. All rights reserved.
//

import UIKit

private let accountFile: String = "useraccount.json"

// 用户账户信息
class WBUserAccount: NSObject {
    
    /// 访问令牌
    @objc var access_token: String? //= "2.00poruKGEpMsREdd8922470aD9cZKD"
    /// 用户代号
    @objc var uid: String?
    /// access_token的生命周期，单位秒
    /// 开发者 5 年
    /// 使用者 3 天
    @objc var expires_in: String? {
        didSet{
            expiresDate = Date(timeIntervalSinceNow: Double(expires_in ?? "0")!)
        }
    }
    
    // 过期日期
    @objc var expiresDate: Date?
    
    /// 用户昵称
    @objc var screen_name: String?
    
    /// 用户头像
    @objc var avatar_large: String?
    
    override var description: String{
        return yy_modelDescription()
    }
    
    override init() {
        super.init()
        
        // 从磁盘加载保存的文件 -> 字典
        // 1> 加载磁盘文件到二进制数据，如果失败直接返回
        guard let path = accountFile.cz_appendDocumentDir(),
            let data = NSData(contentsOfFile: path),
        let dict = try? JSONSerialization.jsonObject(with: data as Data, options: []) as? [String: AnyObject] else {
                
                return
        }
        // 2.使用字典设置属性值
        yy_modelSet(with: dict ?? [:])
        
        print("从沙盒加载用户信息 \(self)")
        
        // 3. 判断 token 是否过期
        // 测试账户过期 - 开发中，每一个分支都需要测试
        //expiresDate = Date(timeIntervalSinceNow: -3600 * 24)
        if expiresDate?.compare(Date()) != .orderedDescending {
           print("账户过期")
            
            // 清空 token
            access_token = nil
            uid = nil
            
            // 删除账户文件
            _ = try? FileManager.default.removeItem(atPath: path)
            
        }
        
        
    }
    
    /**
        1. 偏好设置(小)
        2. 沙盒-归档/plist/json
        3. 数据库(FMDB/CoreData)
        4. 钥匙串访问(小/自动加密 - 需要使用框架 SSKeychain)
     */
    func saveAccount() {
        // 1> 模型转字典
        var dict = self.yy_modelToJSONObject() as? [String: AnyObject] ?? [:]
        
        // 需要删除 expires_in 值
        dict.removeValue(forKey: "expires_in")
        
        // 2> 字典序列化 Data
        guard let data = try? JSONSerialization.data(withJSONObject: dict, options: []),
            let filePath = accountFile.cz_appendDocumentDir() else {
                return
        }
        
        // 3> 写入磁盘
        (data as NSData).write(toFile: filePath, atomically: true)
        
//        UserDefaults.standard.set(dict, forKey: "useraccount")
//        UserDefaults.standard.synchronize()
        
        print("用户保存数据成功 \(filePath)")
//        print("userdefault数据 \(String(describing: UserDefaults.standard.value(forKey: "useraccount")))")
        
    }
}
